# 今天是学习代码的第一天
"""
大家好，我叫家成
今天是11月10日
是我们学习代码的第一天
"""
"""
print("hello python!")
print("我们是来测第十九期的学员")
print("大家好,来测",end = "!")
print()
print()
print("我们是来测科技")
print("白嘉诚","防御","王很帅","王不帅",sep="!!") # 所有字串都用逗号隔开
"""
# 变量定义整数
"""
a = 5  # 将5，赋值给了a
print(a) # 5
A = 10
print(A) # 10
_ = 20
print(_) # 这种定义变量的方式是可以，但是不推荐
classid = 19
print(classid) # 19
"""
# 定义字符串
"""
name1 = "王长帅"
print(name1) # 王长帅
# 1name = "防御"  # 错误的变量定义方式，不要以数字开头
# print(1name)
#5 = 10 # 这种也是错误的
name1 = "防御"
print(name1) # 会将name1重新定义，此时的name1就是防御
# print = "我是一个print" # 不要用关键字去定义变量，否则程序不知道你用的是关键字还是用的定义变量
# print(print)
s = '你不用刻意去改变自己，我不能适应你' # 这个是单引号定义的字符串
print(s)

s = "不判星辰不盼你" # 这个是双引号定义的字符串
print(s)

# s = "心中没有涟漪'  # 定义字符串的引号不能单双混合使用
# print(s)

# s = "吾日："喜欢一个人是藏的住的 就算我没有眼睛 裤裆也会鼓起来"" # 相同的引号，是不可以嵌套使用的
# print(s)

s = "吾日：'喜欢一个人是藏的住的 就算我没有眼睛 裤裆也会鼓起来'"
print(s) # 吾日：'喜欢一个人是藏的住的 就算我没有眼睛 裤裆也会鼓起来'

s = '吾日："喜欢一个人是藏的住的 就算我没有眼睛 裤裆也会鼓起来"'
print(s) # 吾日："喜欢一个人是藏的住的 就算我没有眼睛 裤裆也会鼓起来"

# s="道路千万条,\
# 	安全第一条,\
# 		行车不规范,\
# 			亲人两开花,"
# print(s) # 报错，单引号和双引号不能跨行使用

s = "道路千万条，\n" \
    "安全第一条，\n" \
    "行车不规范，\n" \
    "亲人俩开花，"
print(s) # 虽然字符串看起来换行了，但仍然是整体的，需要加上\n才是真正的换行输出

s = '''道路千万条,
安全第一条,
行车不规范,
亲人疼俩开花,
'''
print(s) # 三引号可以跨行使用，并且会保留原来的样式
"""
# s = """心中晚点涟漪""" # 这个是三引号定义的字符串
# print(s)
#定义浮点数
"""
b = 1.34 # 定义了一个浮点型，也就是小数
B = 1.33
print(b + B)
c = 0.1+0.2 # 定义c变量，两个小数相加
print(c) # 0.30000000000000004
"""

# 转义字符
"""
path = "C:\\Windows\\appcompat"
print(path) # C:\Windows\appcompat

path = "C:\Windows\temp" # \t 制表符，相当于键盘上的tab键
print(path) # C:\Windows	emp

path = "C:\Windows\nemp" # \n 换行符，就是换行
print(path)

name = r"王长帅\n王很帅\n王不帅\n王长不帅\n王张"
print(name) # 字符串外面加一个r，表示不转义输出
"""

# 【格式化字符串】
# 字符串拼接
"""
a = 'abc' + 'haha' + '哈哈'
print(a) # abchaha哈哈
print('a = '+a) # a = abchaha哈哈
"""
# a = 123
# print("a = "+a) # 报错,因为a这个变量是int类型，不可以和字符串相加
# %占位符
# todo : %s 在字符串中表示任意字符
"""
b = '假如生活出卖了我 %s'%'我希望是论斤卖'
print(b) # 假如生活出卖了我 我希望是论斤卖
b = "我叫%s，今年%s岁，我来自%s"%("防御",99,"黑龙江")
print(b) # 我叫防御，今年99岁，我来自黑龙江
print("%s祝福大家，早日毕业！"%"来测科技")
b = "我吃到了一颗好吃的糖，%10s"%"想跟你的嘴巴分享" # %10s，如果不够10个会用空格来代替
print(b)
"""
# todo: %f 浮点数占位符
"""
c = "hello %f"%123.456
print(c)
c = "hello %.2f"%12.456
print(c) # hello 12.46
c = "hello %.2f"%12.445
print(c) # 小数位会四舍五入，进一位
"""
# todo： %d 整数占位符
# c = "hello %d"%112
# print(c)
# c = "hello %3d"%1
# print(c) # %3d，如果整数不够3位，空格凑
# todo：占位符，除了%s是通用的，其他的必须和对应类型一致
# print("我今年%d岁，我来自%d"%(20,"长春")) # 错误的，占位符是int类型，不可以用字符串
# print("我今年%s岁，我来自%s"%(20,"长春"))
# todo:格式化字符串- 嵌入
# 嵌入变量
"""
a = 5
b = 3
c = f'Hello {a} {b}'
print(c)
# 直接嵌入
print(f"大家好，我叫{'防御'}，今年{99}岁，来自{'蒙古'}")
"""
# 字符串复制
"""
a = 'abc'
a = a*2 # a变成了 abcabc  * 在语言中表示乘法，这个意思就是输出两遍abc
print(a)  # abcabc
b = 'abc'
print(b)
"""
# 布尔值和空值
# 布尔值就是true和false，真和假
"""
a = True
b = False
print(a)
print(b)
print(1+False) # 布尔值实际上也属于整数，True就相当于1，False就相当于0
"""

# 空值None
# None专门用来表示不存在
"""
a = None
print(a) # 在Python里，变量是没有数据类型的，我们所说变量的数据类型，其实是变量对应的值的数据类型
"""

# 类型检查
"""
a = 123 # 整数类型
print(type(a)) # 判断a的类型 <class 'int'>
b = "123"
print(type(b)) # 判断b的类型 <class 'str'>
c = True
print(type(c)) # 判断c的类型 <class 'bool'>
d = 1.2
print(type(d)) # 判断d的类型 <class 'float'>
e = None
print(type(e)) # 判断e的类型 <class 'NoneType'>
f = [] # python的数据类型：列表
print(type(f)) # 判断f的类型 <class 'list'>
g = {} # python的数据类型：字典
print(type(g)) #判断g的类型 <class 'dict'>
h = set() # python的数据类型：集合
print(type(h)) # 判断h的类型 <class 'set'>
i = () # python的数据类型：元组
print(type(i))# 判断i的类型 <class 'tuple'>
"""
# id查看对象存储的内存空间
# 整数、字符串、元组都是不可变的数据类型
"""
a = 112
b = 112
print(a)
print(id(a)) # 1629503472
print(id(b)) # 1629503472

c = "王长帅"
d = "王长帅"
print(id(c)) # 32041184
print(id(d)) # 32041184

# 列表、集合、字典都是可变的数据类型
e = [123,123]
f = [123,123]
print("e %s"%id(e)) # 26035624
print("f %s"%id(f)) # 26036784
"""
# 类型转换
# todo： int整数强转
"""
a = "5" # 定义了一个字符串5
print(type(a))
# print(a + 5) # 无法相加，因为a变量是字符串
# 将a类型转成int类型
print(int(a) + 5) # 把a变量转成整数5，再去相加
"""

# a = "a"
# print(int(a)) # 会报错，因为字符串里是字母，不是数字

# todo：float 小数强转
"""
b = '5.1'
print(float(b)) # 把字符串5.1转成小数
c = "5"
print(float(c)) # 把字符串5转成5.0
d = "asd"
print(float(d)) # ValueError: could not convert string to float: 'asd'
"""
# todo：str  将对象转换成字符串
"""
a = 10
print(type(str(a))) # 将a转成了字符串 <class 'str'>
print(type(a))  # <class 'int'>
a = str(a) # 重新强转a并赋值给a，这个时候a就是字符串
print(type(a)) # <class 'str'>
"""
# todo： bool 将对象转成布尔值
# 整数的布尔值： 0为假，其他为真
"""
a = 0
b = 1
print(bool(a)) # False
print(bool(b)) # True
"""
# 字符串的布尔值：空字符串为假，其他为真
"""
a = ""
b = "1"
print(bool(a)) # False
print(bool(b)) # True
"""

# 元组的布尔值：空元组为假，其他为真
"""
a = ()
b = (1,)
print(bool(a))
print(bool(b))
"""
# 列表的布尔值：空列表为假，其他为真
"""
a = []
b = [1]
print(bool(a)) # False
print(bool(b)) #True
"""
# 集合的布尔值：空集合为假，其他为真
"""
a = set()
b = {1}
print(bool(a))
print(bool(b))
"""
# 字典的布尔值：空字典为假，其他为真
"""
a = {}
b = {"姓名":"王很帅"}
print(bool(a))
print(bool(b))
"""

# 赋值运算符
# todo: 等号连接的变量可以传递赋值
"""
a = b = c = d = "hello"
print(a)
print(b)
print(c)
print(d)
"""
# todo：拆包
"""
m,n = 3,5 # 实际就是3赋值给了m，5赋值给了n
print(m)
print(n)
"""
"""
x = "hello","good","yes" # 有多个值赋值给一个变量，
# 返回的类型是一个元组
print(x) # ('hello', 'good', 'yes')
"""
# 拆包时，变量的个数和值的个数不一致，会报错
# y,z = 1,2,3,4,5
# print(y)
# print(z)
# todo：不定长参数接收
"""
a,*p = 1,2,3,45
print(a) # a就表示1
print(p) # p表示可以不定长接受参数
"""

# 算数运算符
"""
a = 10
b = 5
# 加
print(a + b) # 15
# 减
print(a - b) # 5
# 乘
print(a * b) # 50
# 除
print(a / b) # 2.0
# 整除
c = 10
d = 3
print(c // d) # 3
# 取余
print(c % d) # 1
# 幂
print(c ** d) # 10*10*10
"""

# 控制语句
"""
a = 12
if a == 10: # 两个等于号是判断相等，一个等于号是赋值
    print("a等于10，那么我的名字就是王长帅")
else:
    print("a不等于10，那么我是防御")
"""

# 有if、elif、else的情况
"""
name = input("请输入您的姓名")
# print(type(name)) # <class 'str'>
if name == "白嘉诚":
    print("来测讲师")
elif name == "王长帅":
    print("来测19期班副")
elif name == "魏延":
    print("来测19期班长")
else:
    print("啥也不是")
"""

# 有if、if、else的情况

# age = int(input("请输入您的年龄"))
"""
if age > 0 and age <= 6:
    print("小孩")
if age > 1 and age <=7:
    print("学前孩童")
else:
    print("不知道多大了就")
if age == 10 or age ==11:
    print("年龄在10或者11都属于未成年")
"""
"""
if age < 0:
    pass # 没有任何的内容，为空
"""

# while循环
"""
num = 0 # 定义一个循环变量
while num <=5: # 如果说num值小于等于5，则开始循环，否则跳出循环
    print("大家好，我是王长帅")
    num+=1 # num = num+1

num = 5 # 定义一个循环变量
while num >=0: # 如果说num值小于等于5，则开始循环，否则跳出循环
    print("大家好，我是王长帅")
    num-=1 # num = num+1
"""
"""
while循环的一些特点：
1、必须要有循环表达式，为True，则开始循环，为False，则跳出循环
2、循环变量必须要有自增或者自减，否则是死循环

0<=5  表达式为True，开始循环
6<=5  表达式为False，跳出循环
"""

# for 循环
"""
for i in range(5): # i 是循环变量 range是一个序列，它是从0开始的，到5结束。它控制i的变量值
    print("我是%s个王长帅" %i)
    if i == 3:
        break # 跳出循环
"""
"""
for i in range(5): # i 是循环变量 range是一个序列，它是从0开始的，到5结束。它控制i的变量值
    if i ==0 :
        continue  # 跳出本次循环，继续下一次的循环
    print("我是%s个王长帅" %i)
"""
"""
for循环的特点：
1、一般是配合range序列做循环。range(0,5)，那么会从0开始循环，到4结束，不会走到5
2、和while来讲，不用提前定义好while循环变量，也不需要设置循环变量的自增或者自减
3、for循环还可以遍历其他数据结构

list1 = [12,34,56,78,99]
for i in list1:
    print(i)
"""
# 字符串表现形式
"""
a = "我叫王长帅"
b = '王长帅说：我很帅'
c = "我说：王长帅，很\t\t帅吗？"
d = '''王长帅说：我不帅谁帅'''
print(a)
print(b)
print(c)
print(d)
"""
# e = """我说：你不帅"""
# print(e)
# todo：索引
"""
word = "longzai"
print(word[5])
print(word[-3])
print(word)
"""
"""
下标又被成为索引：
从左向右面，索引从0开始
从右向左面，索引从-1开始
longzai
l:0
o:1
n:2
g:3
...
"""
# todo：切片
classinfo = "辽宁省沈阳市沈河区旭辉中心B座3301，33楼来测科技第19期班级"
# print(classinfo)
"""
print(classinfo[0:3]) # 辽宁省
print(classinfo[9:13]) # 旭辉中心
print(classinfo[2:]) # 省沈阳市沈河区旭辉中心B座3301，33楼来测科技第19期班级
print(classinfo[:6]) # 辽宁省沈阳市
print(classinfo[-6:]) # 第19期班级
"""

"""
print(classinfo[0:8:2]) # 辽省阳沈
print(classinfo[::-1]) #级班期91第技科测来楼33，1033座B心中辉旭区河沈市阳沈省宁辽
"""

"""
切片：
str[start:end:step]
start：开始的位置
end：结束的位置
从开始的位置进行切片： [0:8]   从角标0的位置开始，到角标为8-1结束

step：步进，隔几个取，如果开始的位置和结束的位置没有，步进为负数，就是倒序
[::-1]  倒序
[::2]  每隔两个取一个


"""
# address = classinfo[0:3]
# print(address) # 辽宁省
#todo：字符串的相关方法
"""
name = "王长帅"
names = "王长帅\n防御"
name_ = "apple"
name_s = "  apple  "
print(len(name)) # 统计字符串的长度
print(name.split("长")) # 分割字符串，返回的是列表
print(name.join("帅帅")) # 加入字串，开头和结尾
print(name.index("帅")) # 2，帅所处的角标位置
print(names.splitlines()) # 按行进行分割，['王长帅', '防御']
print(name.replace("王长帅","王不帅")) # 它的作用域仅是在这一行
print(name) # 还是王长帅
print(name_.capitalize()) # Apple 首字母大写
print(name_.title())
print(name_s)
print(name_s.strip())
"""

# a = "A"
# print(ord(a)) # A从65开始，B是66，a是从97
# print(ord("a")) # 97
# print(ord("c")) # 99

# GBK编码
"""
print("你".encode("gbk"))
# UTF-8编码
print("你".encode("utf-8"))
x = b'\xc4\xe3'
print(x.decode('gbk'))

"""
# z = b'\xe4\xbd\xa0'
# print(z.decode('utf-8'))

# 成员运算符
"""
n = input("请输入你的姓")
if n in "白李张刘马":
    print("你的姓在白李张刘马内")
else:
    print("不在这个范围1")
if n not in "白李刘张马":
    print("不在这个范围2")
"""

# 身份运算符 判断两个地址值是否相等
# 整数类型的地址值是一样的
"""
a = 10
b = 10
if a is b:
    print("a 和 b的地址值是一样的")
else:
    print("a 和 b两个的地址值是不一样的")
"""
"""
# 这个是比较地址值是否相等
a = [10,12]
b = [10,12]
if a is b:
    print("a 和 b的地址值是一样的")
else:
    print("a 和 b两个的地址值是不一样的")
"""
"""
# 这个是比较具体的值是否相等
a = [10,12]
b = [10,12]
if a == b:
    print("两个列表相同")
else:
    print("两个列表不相同")
"""

"""
a = "王长帅"
b = "王长帅"
if a is b:
    print("a 和 b的地址值是一样的")
else:
    print("a 和 b两个的地址值是不一样的")
"""

for i,item in enumerate([
        ['coffee', 30],  # 0
        ['chicken', 20],  # 1
        ['iphone', 10000],  # 2
        ['car', 1000000],  # 3
        ['building', 2000000],  # 4
    ]):
    print(i,item)


